package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

//func (wg *WaitGroup) Add(delta int)
//func (wg *WaitGroup) Done()
//func (wg *WaitGroup) Wait()
/*
	Wait调用者会阻塞等待 WaitGroup的内部计数变为0
	Add 负责增加计数
	Done 负责减少计数
*/

func demo() {
	fmt.Println("I am demo")
	time.Sleep(time.Second * 3) //为了演示效果
	fmt.Println("I am demo, end")
	wg.Done() //减少计数
}

func main() {
	wg.Add(1) //增加一个计数
	go demo()
	fmt.Println("begin wait")
	wg.Wait() //等待demo执行完成
	fmt.Println("main over")
}
